// pages/game/game.js
// 倒计时的时间
var TIME = 60;
Page({

//非常重要★★★★★
//只有写在data里面的属性 才能在wxml中使用
//才可以使用 数据双向绑定的功能
  data: {
    //表示色块行数的属性
    row:2,
    //盛放色块详细信息的数组
    items:[],
    //倒计时的时间
    time:TIME,
    score:0,//分数
    step:0//步数

  },

//初始化页面调用
//可以在这个函数中初始化不在wxml中使用的属性
  onLoad:function(){
    this.width = 750;
    this.getDeviceWidth();
    //难度系数
    this.difficulty = 0.1;
    this.gameCore();
    //初始化titles的数组
    this.titles = ["色郎","色鬼","色魔","色圣"];
    //获取title的下标
    this.titleIndex = 0;

  },

//游戏的核心部分
  gameCore:function(){

  //每一个色块的间距
  var tempColorViewWidth = this.width/this.data.row;//平均分的 临时色块宽度
  var space = tempColorViewWidth * 0.1;//计算后的 色块间距

  //色块的宽度 = （总宽度 - 总间距）/一行有多少色块
  var allSpace = space * (this.data.row+1);//总间距
  var colorViewWidth = (this.width - allSpace) / this.data.row;

//获取随机的颜色
  var color = this.randColor();

//设置特殊颜色是哪一个色块
  var allNums = this.data.row * this.data.row;
  var specialIndex = parseInt(Math.random() * allNums);

  var tempList = [];
//循环创建色块的信息 放入数组
  for(var i = 0;i<allNums;i++){
    var info ={
      width: colorViewWidth,
      color: color,
      space: space,
      opacity: i == specialIndex ? this.difficulty:1
    }
    tempList.push(info);
  }

  this.setData({
    items: tempList
  });

  },

//随机颜色的函数
  randColor:function(){
    //随机0-255之间的整数
    var r = parseInt(Math.random() * 256);
    var g = parseInt(Math.random() * 256);
    var b = parseInt(Math.random() * 256);
    return "rgb("+r+","+g+","+b+")";
  },

//获取设备的宽度
  getDeviceWidth:function(){
    wx.getSystemInfo({
      success: function(res) {
        this.width = res.windowWidth;
      }.bind(this)
    })
  },

  success:function(){
    //成功时候 更新行数row的值
    //如果做难度扩展 可以添加专门改变this.data.row的值的函数
    this.setData({
      row:++this.data.row,
      step:++this.data.step
    });
    //走五步 给一分
    if(this.data.step%5 == 0){
      this.setData({
        score:++this.data.score
      });
    }
    if (this.data.step % 10 == 0) {
      ++this.titleIndex;
    }
    //防止数组越界
    if (this.titleIndex >= this.titles.length) {
      this.titleIndex = this.titles.length - 1;
    }
    //难度提升
    if (this.difficulty < 0.9 && this.data.step%2 == 0){
      this.difficulty = this.difficulty + 0.1
    }
  },

  getTitle:function(){
    return this.titles[this.titleIndex];
  },

  fail:function(){
    //重置时间状态，行数

    this.setData({
      row:2,
      time:TIME
    });
    
    clearInterval(this.timer);

    wx.showModal({
      title: '温馨提示',
      content: '您已经被警方锁定，您就是被追查的'+this.getTitle()+'，是否重新检测',//todo:暂时写死，后面根据等级的名字提示
      showCancel: true,
      cancelText: '去自首',
      cancelColor: 'red',
      confirmText: '继续检测',
      confirmColor: 'orange',
      success: function(res) {
        console.log(res);
        // 点击 去自首 返回上一页
        // 点击 继续检测 重新开始游戏
        res.cancel?this.back():this.reStartGame();
      }.bind(this)
    })
    this.titleIndex = 0;
    this.difficulty = 0.1;
  },
  back:function(){
    wx.navigateBack();
    //todo: 上传分数到服务器
  },
  reStartGame:function(){
    this.timer = setInterval(this.updateTime,1000);
    this.gameCore();
  },

  chooseAction:function(e){
    var opacity = e.currentTarget.dataset.opacity;
    opacity==1?this.fail():this.success();
    this.gameCore();
  },

  //更新时间的函数
  updateTime:function(){
    this.setData({
      time:--this.data.time
    });
    if(this.data.time <= 0){
      this.fail();
    }
  },

  //页面显示时候调用
  onShow:function(){
    this.timer = setInterval(this.updateTime,1000);
    this.playMusic();
  },

  onUnload:function(){
    clearInterval(this.timer);
    this.timer = null;
    this.stopMusic();
  },

  playMusic:function(){
    wx.playBackgroundAudio({
      dataUrl: 'http://bmob-cdn-19172.b0.upaiyun.com/2018/05/16/54cc751c4044f9798061178da17968a5.mp3'
    })
  },

  stopMusic:function(){
    wx.stopBackgroundAudio();
  }
  
})